package com.qfedu.mtl.util;

import java.lang.reflect.Field;

public class BeanUtil {
    /**
     * 属性拷贝
     * @param obj
     * @param cls
     * @param <T>
     * @return
     */
    public static  <T> T  copy(  Object obj , Class<T> cls ){
        T result = null;
        try {
            //创建返回对象
            result = cls.newInstance();
            //被拷贝对象的 类对象
            Class<?> srcCls = obj.getClass();
            //为 result对象属性赋值
            Field[] fds = cls.getDeclaredFields();
            for (Field fd : fds) {
                try {
                    //查找 obj 上的同名字属性 ，并去取出他的值
                    Field fdTarget = srcCls.getDeclaredField(fd.getName());
                    fdTarget.setAccessible(true);
                    Object value = fdTarget.get(obj);
                    //把取出来的值赋值给 result对象
                    fd.setAccessible(true);
                    fd.set( result,value);
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                }
            }
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return result;
    }
}
